<?php
 /**
 * Creation d'un graphique recapitulatif du releve des absences/retards/excuses pour l'annee
 * @param int $id_classe L'id de la classe
 * @param int $id_eleve L'id de l'eleve
 * @param string $date_debut Date de debut d'affichage
 * @param string $date_fin Date de fin d'affichage
 * @param int $type Type d'affichage (1=absences/2=retards/3=excuses)
 * @param int $resul Type de resultats (1=tranche horaire/2=heure/3=demi-jour/4=jour)
 * @param int $arr Type d'arrondi (1=sans/2=avec/3=arrondi inferieur/4=arrondi superieur)
 * @param int $filtre Filtrage si a 1
 * @param int $affcar Affichage des caracteristiques si a 1
 * @param int $numero Numero de tableau a afficher (0=les deux/1=excuse/2=non excuse)
 * @param string $couleur_fond Couleur du fond (format RRVVBB)
 * @param string $couleur_fond_graphe Couleur du fond du graphe (format RRVVBB)
 * @param string $couleur_tracee_1 Couleur du tracee numero 1 (format RRVVBB)
 * @param string $couleur_tracee_2 Couleur du tracee numero 2 (format RRVVBB)
 * @param string $couleur_contour_points_1 Couleur du contour des points 1 (format RRVVBB)
 * @param string $couleur_contour_points_2 Couleur du contour des points 2 (format RRVVBB)
 * @param string $couleur_interieur_point_1 Couleur de l'interieur des points 1 (format RRVVBB)
 * @param string $couleur_interieur_point_2 Couleur de l'interieur des points 2 (format RRVVBB)
 * @param string $couleur_axes Couleur des axes (format RRVVBB)
 * @param string $couleur_traits_horizontaux Couleur traits horizontaux (format RRVVBB)
 * @param string $couleur_traits_verticaux Couleur traits verticaux (format RRVVBB)
 * @param string $couleur_fonte Couleur fonte d'affichage des abscisses/ordonnees (format RRVVBB)
 * @param string $couleur_titre Couleur du titre (format RRVVBB)
 * @return mixed Image au format PNG (par defaut)
 */
 If (IsSet ($_GET ["reentrance"])) { $reentrance = $_GET ["reentrance"] ; } ElseIf (IsSet ($_POST ["reentrance"])) { $reentrance = $_POST ["reentrance"] ; }
 If (!IsSet ($reentrance))
  {
   Session_Start () ;
   $code = $_SESSION ["code"] ;
   $repertoire_config = "../../../include" ;
   //If (!$repertoire_config) { Exit ; }
   Include ($repertoire_config."/garennes.cfg") ;
   Include ($repertoire_config."/init.php") ;
   Include ($repertoire_config."/module_absences.cfg") ;
   Include ($repertoire_config."/module_absences.php") ;
   Include ("../../include/config.inc") ;
   Include ("../../include/absences.cfg") ;
   verif_droits ($droit_courant, $code) ;
   $id_util = utilparcode ($_SESSION ["code"]) ;
  }
 If (IsSet ($_GET ["id_classe"])) { $id_classe = $_GET ["id_classe"] ; }
 If (IsSet ($_GET ["id_eleve"])) { $id_eleve = $_GET ["id_eleve"] ; }
 If (IsSet ($_GET ["date_debut"])) { $date_debut = $_GET ["date_debut"] ; }
 If (IsSet ($_GET ["date_fin"])) { $date_fin = $_GET ["date_fin"] ; }
 If (IsSet ($_GET ["type"])) { $type = $_GET ["type"] ; }
 If (IsSet ($_GET ["resul"])) { $resul = $_GET ["resul"] ; }
 If (IsSet ($_GET ["arr"])) { $arr = $_GET ["arr"] ; }
 If (IsSet ($_GET ["filtre"])) { $filtre = $_GET ["filtre"] ; }
 If (IsSet ($_GET ["affcar"])) { $affcar = $_GET ["affcar"] ; }
 If (IsSet ($_GET ["numero"])) { $numero = $_GET ["numero"] ; }
 If (IsSet ($_GET ["couleur_fond"])) { $couleur_fond = $_GET ["couleur_fond"] ; }
 If (IsSet ($_GET ["couleur_fond_graphe"])) { $couleur_fond_graphe = $_GET ["couleur_fond_graphe"] ; }
 If (IsSet ($_GET ["couleur_tracee_1"])) { $couleur_tracee_1 = $_GET ["couleur_tracee_1"] ; }
 If (IsSet ($_GET ["couleur_tracee_2"])) { $couleur_tracee_2 = $_GET ["couleur_tracee_2"] ; }
 If (IsSet ($_GET ["couleur_contour_points_1"])) { $couleur_contour_points_1 = $_GET ["couleur_contour_points_1"] ; }
 If (IsSet ($_GET ["couleur_contour_points_2"])) { $couleur_contour_points_2 = $_GET ["couleur_contour_points_2"] ; }
 If (IsSet ($_GET ["couleur_interieur_points_1"])) { $couleur_interieur_points_1 = $_GET ["couleur_interieur_points_1"] ; }
 If (IsSet ($_GET ["couleur_interieur_points_2"])) { $couleur_interieur_points_2 = $_GET ["couleur_interieur_points_2"] ; }
 If (IsSet ($_GET ["couleur_axes"])) { $couleur_axes = $_GET ["couleur_axes"] ; }
 If (IsSet ($_GET ["couleur_traits_horizontaux"])) { $couleur_traits_horizontaux = $_GET ["couleur_traits_horizontaux"] ; }
 If (IsSet ($_GET ["couleur_traits_verticaux"])) { $couleur_traits_verticaux = $_GET ["couleur_traits_verticaux"] ; }
 If (IsSet ($_GET ["couleur_fonte"])) { $couleur_fonte = $_GET ["couleur_fonte"] ; }
 If (IsSet ($_GET ["couleur_titre"])) { $couleur_titre = $_GET ["couleur_titre"] ; }
 
 $type_trace = 0 ;
 
 // Creation de l'image
 $image = @ImageCreate ($recapitulatif_largeur [$type_trace], $recapitulatif_hauteur [$type_trace]) Or Die ("Je ne peux pas initialiser la bibliotheque GD : Voir l'administrateur Garennes.") ;
 
 // Initialisation des couleurs
 // Couleur de fond du tracee
 If (IsSet ($couleur_fond)) { $c = extraction_couleur ($couleur_fond) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_fond [$type_trace]) ; }
 $fond = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur de fond du graphe
 If (IsSet ($couleur_fond_graphe)) { $c = extraction_couleur ($couleur_fond_graphe) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_fond_graphe [$type_trace]) ; }
 $fond_graphe = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur du tracee 1
 If (IsSet ($couleur_tracee_1)) { $c = extraction_couleur ($couleur_tracee_1) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_trace [$type_trace][1]) ; }
 $trace [1] = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur du tracee 2
 If (IsSet ($couleur_tracee_2)) { $c = extraction_couleur ($couleur_tracee_2) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_trace [$type_trace][2]) ; }
 $trace [2] = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur du contour du point 1
 If (IsSet ($couleur_contour_points_1)) { $c = extraction_couleur ($couleur_contour_points_1) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_points_contour [$type_trace][1]) ; }
 $points_contour [1] = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur du contour du point 2
 If (IsSet ($couleur_contour_points_2)) { $c = extraction_couleur ($couleur_contour_points_2) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_points_contour [$type_trace][2]) ; }
 $points_contour [2] = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur de l'interieur du point 1
 If (IsSet ($couleur_interieur_points_1)) { $c = extraction_couleur ($couleur_interieur_points_1) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_points_interieur [$type_trace][1]) ; }
 $points_interieur [1] = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur de l'interieur du point 2
 If (IsSet ($couleur_interieur_points_2)) { $c = extraction_couleur ($couleur_interieur_points_2) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_points_interieur [$type_trace][2]) ; }
 $points_interieur [2] = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur des axes
 If (IsSet ($couleur_axes)) { $c = extraction_couleur ($couleur_axes) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_axes [$type_trace]) ; }
 $axes = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur traits horizontaux
 If (IsSet ($couleur_traits_horizontaux)) { $c = extraction_couleur ($couleur_traits_horizontaux) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_traits_horizontaux [$type_trace]) ; }
 $traits_h = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur traits verticaux
 If (IsSet ($couleur_traits_verticaux)) { $c = extraction_couleur ($couleur_traits_verticaux) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_traits_verticaux [$type_trace]) ; }
 $traits_v = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur fonte
 If (IsSet ($couleur_fonte)) { $c = extraction_couleur ($couleur_fonte) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_fonte [$type_trace]) ; }
 $fonte = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Couleur titre
 If (IsSet ($couleur_titre)) { $c = extraction_couleur ($couleur_titre) ; } Else { $c = extraction_couleur ($recapitulatif_couleur_titre [$type_trace]) ; }
 $titre = @ImageColorAllocate ($image, $c [0], $c [1], $c [2]) ;
 
 // Taille des caracteres
 $h_fonte = @ImageFontHeight ($recapitulatif_taille_fonte [$type_trace]) ;
 $l_fonte = @ImageFontWidth ($recapitulatif_taille_fonte [$type_trace]) ;
 $h_fonte_titre = @ImageFontHeight ($recapitulatif_taille_titre [$type_trace]) ;
 $l_fonte_titre = @ImageFontWidth ($recapitulatif_taille_titre [$type_trace]) ;
 
 $t [0] = 1 ; $t [1] = $type ; $r [0] = 1 ; $r [1] = $resul ; $filtrage [0] = 1 ; $filtrage [1] = $filtre ;
 $table = recapitulatif_annee_simple ($id_classe,$id_eleve,$date_debut,$date_fin,$t,$r,$arr,$filtrage) ;
 
 If ($numero == 0) { $depart = 1 ; $fin = 2 ; } Else { $depart = $numero ; $fin = $numero ; }
 
 /*
 For ($i = 1 ; $i <= $table [0][0] ; $i++)
  {
   For ($j = $depart ; $j < $fin ; $j++)
    {
     $table [$i][$j] = Rand (0, Rand (50, 300)) ;
    }
  }
 */
 // Determine le max Vertical
 $max_v = 0 ;
 For ($i = 1 ; $i <= $table [0][0] ; $i++)
  {
   For ($j = $depart ; $j <= $fin ; $j++)
    {
     If ((float)Str_Replace (",",".",$table [$i][$j]) > $max_v) { $max_v = Ceil (Str_Replace (",",".",$table [$i][$j])) ; }
    }
  }
 $x_0 = StrLen ((string)$max_v)*$l_fonte+$recapitulatif_marge_gauche [$type_trace]+$recapitulatif_taille_points [$type_trace]/2 ;
 $largeur_possible = $recapitulatif_largeur [$type_trace]-$x_0-$recapitulatif_marge_droite [$type_trace] ;
 
 // Determine le max Horizontal
 $max_h = $table [0][0] ;
 
 // Determine le max a afficher
 $max_f_h = 3 ;
 If ($recapitulatif_hauteur [$type_trace]-$x_0-$max_f_h*$table [0][0]-$recapitulatif_marge_droite [$type_trace]-$recapitulatif_taille_points [$type_trace]/2 < 0)
  {
   // Ne passe pas sur une ligne donc deux lignes
   $nbr_lignes = 2 ;
  }
 Else
  {
   // Ok sur une ligne
   $nbr_lignes = 1 ;
  }
 If ($recapitulatif_taille_points [$type_trace]/2 > $max_f_h*$l_fonte/2) { $largeur_possible -= $recapitulatif_taille_points [$type_trace]/2 ; }
 Else { $largeur_possible -= $max_f_h*$l_fonte/2 ; }
 $echelle_x = $largeur_possible/($max_h-1) ;
 
 $y_0 = $recapitulatif_hauteur [$type_trace]-$recapitulatif_marge_bas [$type_trace]-$nbr_lignes*$h_fonte-$recapitulatif_taille_points [$type_trace]/2 ;
 If ($numero == 0) { $y_0 -= $h_fonte ; }
 $hauteur_possible = $y_0-$recapitulatif_marge_haut [$type_trace]-$h_fonte_titre-$recapitulatif_marge_titre [$type_trace]-$recapitulatif_taille_points [$type_trace]/2 ;
 If ($max_v > 0) { $echelle_y = $hauteur_possible/$max_v ; } Else { $echelle_y = $hauteur_possible ; $max_v = 1 ; }
 
 // Remplissage du graphe par la couleur
 @ImageFilledRectangle ($image, $x_0, $y_0-$hauteur_possible, $x_0+$largeur_possible, $y_0, $fond_graphe) ;
 
 // Trace des axes verticaux
 @ImageSetThickNess ($image, 1) ;
 For ($i = 1 ; $i < $max_h ; $i++)
  {
   @ImageLine ($image, $x_0+$i*$echelle_x, $y_0-$hauteur_possible, $x_0+$i*$echelle_x, $y_0, $traits_v) ;
  }
 
 // Calcul du pas
 If ($echelle_y > $h_fonte/2) { $pas = 1 ; }
 Else
  {
   For ($i = 5 ; $i <= $max_v ; $i += 5)
    {
     If ($echelle_y*$i > $h_fonte/2) { $pas = $i ; Break ; }
    }
  }
 
 // Calcul du modulo d'affichage des ordonnees et tracee
 If ($echelle_y > 3*$h_fonte/2) { $modulo_ordonnee = 1 ; $modulo = 5 ; }
 Else
  {
   For ($i = $pas ; $i <= $max_v ; $i += $pas)
    {
     If ($echelle_y*$i > 3*$h_fonte/2) { $modulo = $i*2 ; $modulo_ordonnee = $i ; Break ; }
    }
  }
 
 // Trace des axes horizontaux
 For ($i = 0 ; $i <= $max_v ; $i += $pas)
  {
   If ($i > 0)
    {
     If ($i%$modulo == 0) { @ImageSetThickNess ($image, 2) ; } Else { @ImageSetThickNess ($image, 1) ; }
     @ImageLine ($image, $x_0, $y_0-$i*$echelle_y, $x_0+$largeur_possible, $y_0-$i*$echelle_y, $traits_h) ;
    }
  }
 
 // Trace des axes
 @ImageSetThickNess ($image, 1) ;
 @ImageLine ($image, $x_0, $y_0, $x_0+$largeur_possible, $y_0, $axes) ;
 @ImageLine ($image, $x_0, $y_0, $x_0, $y_0-$hauteur_possible, $axes) ;

 // Affichage des abscisses
 $pos_y = $recapitulatif_hauteur [$type_trace]-$recapitulatif_marge_bas [$type_trace]-$h_fonte ;
 If ($numero == 0) { $pos_y -= $h_fonte ; }
 For ($i = 1 ; $i <= $table [0][0] ; $i++)
  {
   $nom = SubSTr (HTML_Entity_Decode ($nom_mois [(integer)$table [$i][0]]), 0, 3) ;
   $pos_x = $x_0+($i-1)*$echelle_x-StrLen ($nom)/2*$l_fonte ;
   @ImageString ($image, $recapitulatif_taille_fonte [$type_trace], $pos_x, $pos_y, $nom, $fonte) ;
  } 
 
 // Affichage des ordonnees
 $pos_x = $recapitulatif_marge_gauche [$type_trace]+StrLen ((string)$max_v)*$l_fonte ;
 For ($i = 0 ; $i <= $max_v ; $i += $pas)
  {
   If ($i%$modulo_ordonnee == 0) { @ImageString ($image, $recapitulatif_taille_fonte [$type_trace], $pos_x-StrLen ((string)$i)*$l_fonte, $y_0-$i*$echelle_y-$h_fonte/2, $i, $fonte) ; }
  }
 
 // Affichage du titre
 $texte_titre = StrToUpper (SubStr ($table [0][5],0,1)).StrToLower (SubStr ($table [0][5],1,StrLen ($table [0][5])-1))."s" ;
 If ($numero != 0)
  {
   If ($numero > 1) { $texte_titre .= " non" ; }
   $texte_titre .= " exc." ;
  }
 If ($affcar == 1)
  {
   Switch ($table [0][6])
    {
     Case -1 : $texte_titre .= " (nombre" ; Break ;
      Case 1 : $texte_titre .= " (demi-heure" ; Break ;
      Case 2 : $texte_titre .= " (heure" ; Break ;
      Case 3 : $texte_titre .= " (demi-journ".Chr (233)."e" ; Break ;
      Case 4 : $texte_titre .= " (jour" ; Break ;
    }
   If ($table [0][7] == 1)
    {
     $id_prog = restaure_configuration ("MODULE_ABSENCES", "FILTRAGE", "DEFAUT_".$table [0][4]."_".$id_util) ;
     If ($id_prog != "")
      {
       $m1 = SQL_commande ("SELECT nom FROM abs_programmes WHERE id_abs_programme='".$id_prog."' LIMIT 1", $id_sql) ;
       If (SQL_nbr_lignes ($m1) == 1)
        {
         $m2 = SQL_ligne_suivante ($m1) ;
         $texte_titre .= "|".$m2 [0] ;
        }
      }
    }
   $texte_titre .= ")" ;
  }
 /*
 $texte_titre .= " en " ;
 Switch ($table [0][6])
  {
   Case -1 : $texte_titre .= "nombre" ; Break ;
    Case 1 : $texte_titre .= "demi-heure" ; Break ;
    Case 2 : $texte_titre .= "heure" ; Break ;
    Case 3 : $texte_titre .= "demi-journee (4h)" ; Break ;
    Case 4 : $texte_titre .= "jour (8h)" ; Break ;
  }
 Switch ($table [0][2])
  {
   Case 0 : $texte_titre .= " sans arrondi" ; Break ;
   Case 1 : $texte_titre .= " avec arrondi" ; Break ;
   Case 2 : $texte_titre .= " avec arrondi inferieur" ; Break ;
   Case 3 : $texte_titre .= " avec arrondi superieur" ; Break ;
  }
 */
 While ((StrLen ($texte_titre)*$l_fonte_titre > $recapitulatif_largeur [$type_trace]-$recapitulatif_marge_gauche [$type_trace]-$recapitulatif_marge_droite [$type_trace])
        And ($recapitulatif_taille_titre [$type_trace] > 1))
  {
   $recapitulatif_taille_titre [$type_trace]-- ;
   $h_fonte_titre = @ImageFontHeight ($recapitulatif_taille_titre [$type_trace]) ;
   $l_fonte_titre = @ImageFontWidth ($recapitulatif_taille_titre [$type_trace]) ;
  }
 $pos_x = ($recapitulatif_largeur [$type_trace]-$recapitulatif_marge_gauche [$type_trace]-$recapitulatif_marge_droite [$type_trace]-StrLen ($texte_titre)*$l_fonte_titre)/2 ;
 $pos_y = $recapitulatif_marge_haut [$type_trace] ;
 @ImageString ($image, $recapitulatif_taille_titre [$type_trace], $pos_x, $pos_y, $texte_titre, $titre) ;
 
 // Affiche les points
 // Tracee des lignes
 For ($j = $depart ; $j <= $fin ; $j++)
  {
   @ImageSetThickNess ($image, 3) ;
   For ($i = 2 ; $i <= $table [0][0] ; $i++)
    {
     If ($depart == 2) { $num = -1 ; } Else { $num = 0 ; }
     @ImageLine ($image, $x_0+($i-2)*$echelle_x, $y_0-Str_Replace (",",".",$table [$i-1][$j])*$echelle_y, $x_0+($i-1)*$echelle_x, $y_0-Str_Replace (",",".",$table [$i][$j])*$echelle_y, $trace [$j+$num]) ;
    }
   // Tracee des points
   @ImageSetThickNess ($image, 2) ;
   For ($i = 1 ; $i <= $table [0][0] ; $i++)
    {
     If ($depart == 2) { $num = -1 ; } Else { $num = 0 ; }
     @ImageFilledEllipse ($image, $x_0+($i-1)*$echelle_x, $y_0-Str_Replace (",",".",$table [$i][$j])*$echelle_y, $recapitulatif_taille_points [$type_trace], $recapitulatif_taille_points [$type_trace], $points_interieur [$j+$num]) ;
    }
   // Tracee de l'exterieur des points
   For ($i = 1 ; $i <= $table [0][0] ; $i++)
    {
     If ($depart == 2) { $num = -1 ; } Else { $num = 0 ; }
     @ImageEllipse ($image, $x_0+($i-1)*$echelle_x, $y_0-Str_Replace (",",".",$table [$i][$j])*$echelle_y, $recapitulatif_taille_points [$type_trace], $recapitulatif_taille_points [$type_trace], $points_contour [$j+$num]) ;
    }
  }

 // Affichage des labels si deux courbes
 If ($numero == 0)
  {
   @ImageSetThickNess ($image, 3) ;
   $taille = 40+StrLen ("excus".Chr (233)."non excus".Chr (233))*$l_fonte ;
   $marge = ($largeur_possible-$taille)/3 ;
   $pos_x = $x_0+$marge ;
   $pos_y = $recapitulatif_hauteur [$type_trace]-$recapitulatif_marge_bas [$type_trace] ;
   @ImageLine ($image, $pos_x, $pos_y-$h_fonte/2, $pos_x+15, $pos_y-$h_fonte/2, $trace [1]) ;
   @ImageString ($image, $recapitulatif_taille_fonte [$type_trace], $pos_x+20, $pos_y-$h_fonte, "excus".Chr (233), $fonte) ;
   $pos_x += 15+StrLen ("excus".Chr (233))*$l_fonte+$marge ;
   @ImageLine ($image, $pos_x, $pos_y-$h_fonte/2, $pos_x+15, $pos_y-$h_fonte/2, $trace [2]) ;
   @ImageString ($image, $recapitulatif_taille_fonte [$type_trace], $pos_x+20, $pos_y-$h_fonte, "non excus".Chr (233), $fonte) ;
  }
 
 Header ("Content-type: image/png") ;
 @ImagePng ($image) ;
 @ImageDestroy ($image) ;
?>